package rabbitmq

import (
	"fmt"
	"log"
	"os"
	"os/signal"
	"syscall"
	"time"
)

func demo() {
	// 配置 RabbitMQ 连接
	cfg := Config{
		Username: "admin",
		Password: "admin123",
		Host:     "localhost",
		Port:     "5672",
	}
	cfg.QueueConfig = &QueueConfig{
		TTL: 1000,
	}
	cfg.DeadQueue = &DeadQueue{}
	// 获取单例客户端
	client := GetInstance(cfg)
	defer client.Close()

	// 队列名称
	queueName := "test3"

	// 启动5个消费者
	consumer, err := client.NewConsumer(queueName, 5, false) // 5个消费者，手动确认
	if err != nil {
		log.Fatalf("创建消费者失败: %v", err)
	}

	// 设置消息处理函数
	consumer.HandleFunc = func(body []byte) error {
		log.Printf("处理消息: %s", body)
		// 模拟处理耗时
		//time.Sleep(0.1 * time.Second)
		if string(body) == "任务 1" {
			fmt.Println("----------------")
		}
		return nil
	}

	// 设置错误处理函数
	consumer.ErrorHandler = func(err error) {
		log.Printf("消息处理错误: %v", err)
	}

	// 启动消费者
	consumer.Start()
	defer consumer.Stop()

	// 发送测试消息
	go func() {
		for i := 0; i < 2; i++ {
			msg := []byte(fmt.Sprintf("任务 %d", i+1))
			if err := client.SendMessage(queueName, msg); err != nil {
				log.Printf("发送消息失败: %v", err)
			} else {
				log.Printf("发送消息: %s", msg)
			}
			time.Sleep(200 * time.Millisecond)
		}
	}()

	// 等待退出信号
	sigChan := make(chan os.Signal, 1)
	signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
	<-sigChan
	log.Println("程序正在退出...")
}
